package linc.spring.demo.bean;

import linc.spring.demo.service.UserService;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

/**
 * @author yqlin
 * @date 2021/9/7 01:43
 * @description 我们可以通过BeanPostPorcessor来干涉Spring创建Bean的过程，
 * 但是如果我们想一个Bean完完全全由我们来创造，也是可以的，比如通过FactoryBean
 * 通过上面这段代码，我们自己创造了一个UserService对象，并且它将成为Bean。
 * 但是通过这种方式创造出来的UserService的Bean，只会经过初始化后，其他Spring的生命周期步骤是不会经过的，比如依赖注入
 * 通过@Bean也可以自己生成一个对象作为Bean，那么和FactoryBean的区别是什么呢？
 * 其实在很多场景下他俩是可以替换的，但是站在原理层面来说的，区别很明显，@Bean定义的Bean是会经过完整的Bean生命周期的
 */
@Component
public class UserFactoryBean implements FactoryBean<UserService> {
    @Override
    public UserService getObject() throws Exception {
        return new UserService();
    }

    @Override
    public Class<?> getObjectType() {
        return UserService.class;
    }
}
